const express = require('express');
const app = express();

// 使用中间件 => 添加允许跨域的响应头 => 解决跨域问题
app.use(function(req, res, next){
  // res.setHeader('Access-Control-Allow-Origin', "http://127.0.0.1:5500");  // 允许跨域请求
  res.setHeader('Access-Control-Allow-Origin', '*');  // 允许跨域请求
  res.setHeader('Access-Control-Allow-Headers', "*"); // 该响应头 允许客户端可以设置『自定义』请求头  
  res.setHeader('Access-Control-Allow-Methods', "*"); // 允许各种请求方式进行跨域请求 get post delete put patch
  next();
});

// 使用中间件 => 解析请求体参数
app.use(express.urlencoded({extended: false}))
app.use(express.json())
// 使用中间件 => 部署静态资源
app.use(express.static('public'))

// 注册路由 (任意类型请求)
app.all('/server/:id', (req, res) => {
  console.log('收到了请求: ', req.method)

  console.log('query参数: ', req.query)
  console.log('params参数: ', req.params)
  console.log('body参数:', req.body)

  res.send('HELLO AJAX 123456789')
});

// 返回json的路由
app.all('/text-server', (req, res) => {
  console.log('/text-server 收到了请求')
  // 返回一般文本数据
  res.send('文本响应数据');
})


// 返回json的路由
app.all('/json-server', (req, res) => {
  console.log('/json-server 收到了请求')
 
  // 返回json数据
  res.json({
    code: '3',
    msg: '此用户名已经存在'
  });
})

// 返回动态的时间值
app.all('/time-server', (req, res) => {
  console.log('/time-server 收到了请求')
  
  // 返回json数据
  res.json({
    time: Date.now()
  });
})

//延时响应
app.all('/delay-server', (req, res) => {
  console.log('/delay-server 服务器正在处理请求')
  setTimeout(() => {
      res.send('这是一个响应哦!');
  }, 5000);
});

// 测试同源策略的路由
app.get('/origin-server', (req, res) => {
  res.send({status: 200, data: {name: 'tom', age: 12}})
});


// 使用json解决跨域的路由
app.get('/jsonp-server', (req, res) => {
  // 确定要返回的响应数据
  let data = {name: '孙悟空', age: 18};
  // 读取函数名参数
  let callback = req.query.callback;
  // 返回一段js代码: 函数名(数据)
  res.send(`${callback}(${JSON.stringify(data)})`);
});

const allProducts = [
  {id: 1, name: 'A1', price: 20},
  {id: 2, name: 'A2', price: 30},
  {id: 3, name: 'A3', price: 35},
  {id: 4, name: 'B1', price: 40},
  {id: 5, name: 'B2', price: 35}
] 
// 处理ajax简单封装的请求
app.get('/prodcuts/:name', (req, res) => {
  const {name} = req.params 
  const {price} = req.query
  // 过滤出满足条件的商品列表
    // 商品名包含name
    // 商品价格大于price
  const products = allProducts.filter(p => p.name.includes(name) && p.price>=price)
  res.send(products)
})

app.post('/prodcuts/add', (req, res) => {
  const p = req.body
  p.id = Date.now()
  allProducts.push(p)
  res.send(allProducts)
})


app.listen(8081, () => {
    console.log('8081 端口服务已经启动....');
})
